/**
 * 在使用映射类型时，有两个额外的修饰符可能会用到：
 * 一个是 readonly，用于设置属性只读；
 * 一个是 ? ，用于设置属性可选；
 * 你可以通过前缀 - 或者 + 删除或者添加这些修饰符，如果没有写前缀，相当于使用了 + 前缀。
 */

// 拷贝类型时，删除readonly修饰符和可选?修饰符
type MapPerson<Type> = {
  -readonly [Property in keyof Type]-?: Type[Property];
};

interface IPerson {
  name: string;
  age?: number;
  readonly height: number;
  address?: string;
}

//
type IPersonRequired = MapPerson<IPerson>;

const p: IPersonRequired = {
  name: "why",
  age: 18,
  height: 1.88,
  address: "广州市",
};

export {};
